CodeIgniter Routing

Web Development - কোডইগনাইটার (Codeigniter) -

Routing হলো CodeIgniter এর একটি গুরুত্বপূর্ণ ফিচার, যা URL এবং অ্যাপ্লিকেশনের কন্ট্রোলারের মধ্যে সংযোগ স্থাপন করে। Routing ব্যবহার করে আপনি অ্যাপ্লিকেশনের URL গুলোকে নিয়ন্ত্রণ করতে পারেন এবং ডিফল্ট কন্ট্রোলার বা মেথডের পরিবর্তে কাস্টম রুট সেট করতে পারেন।


Routing কী?

Routing মূলত নির্ধারণ করে যে ব্যবহারকারীর রিকোয়েস্ট করা URL এর জন্য কোন কন্ট্রোলার এবং মেথড কার্যকর হবে। এটি URL এবং কন্ট্রোলার মেথডের মধ্যে একটি সেতু হিসাবে কাজ করে।

CodeIgniter এর Routing সিস্টেম ফাইলটি application/config/routes.php-এ অবস্থিত।


Routing ফাইলের স্ট্রাকচার

routes.php ফাইলটি কিছু ডিফল্ট সেটিংস সহ আসে। একটি সাধারণ Routing ফাইল এরকম দেখতে পারে:

$route['default_controller'] = 'Welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

১. default_controller

  • এই রুটটি নির্ধারণ করে যে ডিফল্টভাবে কোন কন্ট্রোলার লোড হবে।
  • উদাহরণ:

    $route['default_controller'] = 'Home';
    

২. 404_override

  • এটি নির্ধারণ করে যে রিকোয়েস্ট করা পেজ না পাওয়া গেলে কোন কন্ট্রোলার বা মেথড চালু হবে।
  • উদাহরণ:

    $route['404_override'] = 'errors/page_not_found';
    

৩. translate_uri_dashes

  • এটি ড্যাশ (-) চিহ্নকে _ (আন্ডারস্কোর) এ রূপান্তর করে।
  • উদাহরণ:

    $route['translate_uri_dashes'] = TRUE;
    

কাস্টম Routing তৈরি

১. কন্ট্রোলার এবং মেথড নির্ধারণ

  • আপনি একটি নির্দিষ্ট URL কে একটি নির্দিষ্ট কন্ট্রোলার এবং মেথডের সাথে সংযুক্ত করতে পারেন।
  • উদাহরণ:

    $route['about'] = 'Pages/about';
    

    এখানে http://localhost/about URL চালালে Pages কন্ট্রোলারের about মেথড চালু হবে।

২. রেগুলার এক্সপ্রেশন ব্যবহার

  • রেগুলার এক্সপ্রেশন ব্যবহার করে ডায়নামিক URL তৈরি করা যায়।
  • উদাহরণ:

    $route['product/(:num)'] = 'Product/show/$1';
    

    এখানে (:num) শুধুমাত্র সংখ্যা গ্রহণ করে। যদি http://localhost/product/123 চালানো হয়, তাহলে Product কন্ট্রোলারের show মেথডে 123 প্যারামিটার পাস করা হবে।

৩. ডায়নামিক সেগমেন্ট

  • ডায়নামিক রুট তৈরি করার জন্য (:any) ব্যবহার করা হয়।
  • উদাহরণ:

    $route['blog/(:any)'] = 'Blog/post/$1';
    

    এখানে (:any) যেকোনো স্ট্রিং গ্রহণ করবে। যেমন: http://localhost/blog/my-first-post


Routing এর সাথে HTTP মেথড কন্ডিশন

আপনার অ্যাপ্লিকেশনে রুট নির্ধারণ করতে শুধুমাত্র নির্দিষ্ট HTTP মেথড (GET, POST) ব্যবহার করতে পারেন। উদাহরণ:

$route['post/create']['post'] = 'PostController/create';
$route['post/create']['get'] = 'PostController/form';

এখানে:

  • POST মেথড হলে PostController/create চালু হবে।
  • GET মেথড হলে PostController/form চালু হবে।

Routing এর সুবিধা

  1. SEO-বান্ধব URL: Routing ব্যবহার করে আপনি পরিষ্কার এবং SEO-ফ্রেন্ডলি URL তৈরি করতে পারেন।
  2. কাস্টমাইজড URL: আপনার প্রয়োজন অনুযায়ী URL কাস্টমাইজ করা যায়।
  3. রিডাইরেকশন নিয়ন্ত্রণ: ব্যবহারকারীর অনুরোধ সঠিক কন্ট্রোলারে রিডাইরেক্ট করা সহজ।
  4. ডাইনামিক পেজ সাপোর্ট: ডায়নামিক URL ব্যবহার করে সহজেই বড় অ্যাপ্লিকেশন পরিচালনা করা যায়।

উদাহরণ: একটি সম্পূর্ণ Routing কনফিগারেশন

$route['default_controller'] = 'Home';
$route['404_override'] = 'errors/not_found';
$route['translate_uri_dashes'] = TRUE;

$route['about'] = 'Pages/about';
$route['services'] = 'Pages/services';
$route['contact'] = 'Pages/contact';

$route['product/(:num)'] = 'Product/details/$1';
$route['blog/(:any)'] = 'Blog/post/$1';

CodeIgniter এর Routing সিস্টেম অ্যাপ্লিকেশনের URL এবং কন্ট্রোলার মেথডের মধ্যে সংযোগ তৈরি করে। এটি URL কাস্টমাইজেশন, SEO-বান্ধব স্ট্রাকচার, এবং ডাইনামিক পেজ তৈরি করতে অত্যন্ত কার্যকর।

Content added By

Routes কী এবং কীভাবে কাজ করে

Routes হলো CodeIgniter-এর একটি গুরুত্বপূর্ণ ফিচার, যা URL এবং কন্ট্রোলারের মেথড-এর মধ্যে সম্পর্ক স্থাপন করে। এটি ব্যবহারকারীর রিকোয়েস্ট অনুযায়ী নির্দিষ্ট কন্ট্রোলার এবং মেথড লোড করার জন্য ব্যবহৃত হয়। Routes কনফিগার করার মাধ্যমে আপনি ডিফল্ট রাউট, কাস্টম URL, এবং ডাইনামিক রাউট তৈরি করতে পারেন।


Routes কোথায় সংরক্ষিত?

CodeIgniter এ Routes কনফিগারেশন ফাইলটি app/Config/Routes.php ডিরেক্টরিতে অবস্থিত। এই ফাইলেই সমস্ত রাউট ডিফাইন করা হয়।


Routes কীভাবে কাজ করে?

  1. যখন ব্যবহারকারী ব্রাউজারে একটি URL টাইপ করে, তখন CodeIgniter সেই URL অনুযায়ী Routes.php ফাইলে রাউট খুঁজে।
  2. রাউট যদি মেলে, তাহলে নির্দিষ্ট কন্ট্রোলার এবং মেথড লোড হয়।
  3. যদি কোনো রাউট না মেলে, তাহলে 404 Page Not Found ত্রুটি দেখায়।

Routes এর ধরন

১. ডিফল্ট রাউট

CodeIgniter এর ডিফল্ট রাউট নির্ধারণ করা হয় Routes.php ফাইলে।

ডিফল্ট রাউট উদাহরণ:

$routes->setDefaultController('Home'); // Home কন্ট্রোলার ডিফল্ট
$routes->setDefaultMethod('index');   // index() মেথড ডিফল্ট

ব্রাউজারে অ্যাক্সেস:

http://localhost/your_project/

২. কাস্টম রাউট

আপনার নির্দিষ্ট URL-কে একটি নির্দিষ্ট কন্ট্রোলার এবং মেথডের সাথে ম্যাপ করতে কাস্টম রাউট ব্যবহার করুন।

কাস্টম রাউট উদাহরণ:

$routes->get('about', 'Pages::about'); // 'about' URL-এ 'Pages' কন্ট্রোলারের 'about' মেথড

ব্রাউজারে অ্যাক্সেস:

http://localhost/your_project/about

৩. ডাইনামিক রাউট

ডাইনামিক রাউট ব্যবহার করে URL এর ভেরিয়েবল অংশ ধরতে পারেন।

ডাইনামিক রাউট উদাহরণ:

$routes->get('product/(:num)', 'Product::details/$1'); // URL-এ সংখ্যাকে ক্যাপচার করে
  • (:num): শুধুমাত্র সংখ্যা গ্রহণ করবে।
  • (:any): যে কোনো অক্ষর বা সংখ্যা গ্রহণ করবে।

ব্রাউজারে অ্যাক্সেস:

http://localhost/your_project/product/123

৪. RESTful রাউট

RESTful API তৈরি করতে CodeIgniter এ resource রাউট ব্যবহার করা হয়।

RESTful রাউট উদাহরণ:

$routes->resource('products');

এটি স্বয়ংক্রিয়ভাবে নিম্নলিখিত রাউট তৈরি করে:

  • GET /products → সমস্ত প্রোডাক্ট লিস্ট
  • POST /products → নতুন প্রোডাক্ট যোগ
  • GET /products/1 → ID 1 এর প্রোডাক্ট ডিটেইলস
  • PUT /products/1 → ID 1 এর প্রোডাক্ট আপডেট
  • DELETE /products/1 → ID 1 এর প্রোডাক্ট ডিলিট

রাউটিং প্যারামিটার এবং রুলস

প্যারামিটার ব্যবহার

আপনার URL থেকে প্যারামিটার ক্যাপচার করতে পারেন।

$routes->get('blog/(:any)/(:num)', 'Blog::post/$1/$2');

ব্রাউজারে অ্যাক্সেস:

http://localhost/your_project/blog/title/123
  • $1title
  • $2123

রুলস ব্যবহার

প্যারামিটারের জন্য নিয়ম নির্ধারণ করতে পারেন।

$routes->get('user/(:alpha)', 'User::profile/$1'); // শুধুমাত্র অক্ষর গ্রহণ করবে

Middleware এবং Filters সহ Routes

Routes এর সাথে Middleware বা Filter ব্যবহার করে নির্দিষ্ট পৃষ্ঠা সুরক্ষিত করতে পারেন।

Middleware উদাহরণ:

$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);

এটি নিশ্চিত করে যে auth ফিল্টার চেক করা হবে এবং শুধুমাত্র অথরাইজড ব্যবহারকারীরাই dashboard অ্যাক্সেস করতে পারবে।


Routes এর অগ্রাধিকার

Routes চেক করার সময় সর্বাধিক নির্দিষ্ট রাউট সর্বপ্রথম কার্যকর হয়। তাই ডাইনামিক রাউটগুলোর আগে কাস্টম রাউট নির্ধারণ করা উচিত।

উদাহরণ:

$routes->get('blog/popular', 'Blog::popular'); // নির্দিষ্ট রাউট
$routes->get('blog/(:any)', 'Blog::post/$1'); // ডাইনামিক রাউট

Common Errors এবং সমাধান

404 Not Found

  • সমাধান: রাউট সঠিকভাবে সংজ্ঞায়িত হয়েছে কিনা নিশ্চিত করুন।

Middleware Error

  • সমাধান: নিশ্চিত করুন যে সংশ্লিষ্ট Middleware ফাইলটি সঠিকভাবে সংযুক্ত রয়েছে।

Routes CodeIgniter এ URL গুলোকে সুসংগঠিত ও কার্যকরভাবে পরিচালনা করতে সাহায্য করে। সঠিকভাবে রাউট কনফিগার করলে অ্যাপ্লিকেশন দ্রুত এবং সুরক্ষিতভাবে কাজ করবে।

Content added By

Static এবং Dynamic Routes

Routes CodeIgniter-এ URL এবং Controller এর মধ্যে সংযোগ স্থাপন করে। এটি নির্ধারণ করে যে, কোনো নির্দিষ্ট URL রিকোয়েস্ট কীভাবে প্রক্রিয়াজাত হবে এবং কোন Controller এবং Method কল হবে। CodeIgniter-এ দুটি প্রকারের Routes রয়েছে:

  1. Static Routes
  2. Dynamic Routes

Static Routes

Static Routes ব্যবহার করে একটি নির্দিষ্ট URL এর জন্য নির্দিষ্ট Controller এবং Method কল করা হয়।

Static Route তৈরি করার নিয়ম

Static Route তৈরি করতে app/Config/Routes.php ফাইলে নিচের মতো কোড লিখতে হয়:

$routes->get('about', 'Pages::about');

উদাহরণ:

  • URL: http://localhost/about
  • Controller এবং Method: Pages::about

Controller উদাহরণ:

<?php
namespace App\Controllers;

class Pages extends BaseController {
    public function about() {
        echo "This is the About page.";
    }
}

Dynamic Routes

Dynamic Routes ব্যবহার করে URL এর অংশ হিসেবে ডাইনামিক ডেটা পাস করা যায়। এগুলো সাধারণত URL এর Parameter হিসাবে কাজ করে।

Dynamic Route তৈরি করার নিয়ম

$routes->get('product/(:any)', 'Products::details/$1');
  • (:any): যে কোনো মান গ্রহণ করে।
  • (:num): শুধুমাত্র সংখ্যাসূচক মান গ্রহণ করে।
  • (:alpha): শুধুমাত্র অক্ষর গ্রহণ করে।
  • (:segment): যে কোনো সেগমেন্ট গ্রহণ করে।

উদাহরণ:

  • URL: http://localhost/product/laptop
  • Controller এবং Method: Products::details('laptop')

Controller উদাহরণ:

<?php
namespace App\Controllers;

class Products extends BaseController {
    public function details($name) {
        echo "Product Name: " . $name;
    }
}

Multiple Parameters

$routes->get('product/(:num)/(:alpha)', 'Products::details/$1/$2');
  • URL: http://localhost/product/101/laptop
  • Controller: Products::details(101, 'laptop')

Controller Method:

public function details($id, $name) {
    echo "Product ID: " . $id . " | Product Name: " . $name;
}

Default Routes

CodeIgniter একটি ডিফল্ট Route সেটআপ করে, যা index() Method কল করে।

Default Route:

app/Config/Routes.php ফাইলের মধ্যে ডিফল্ট Route সংজ্ঞায়িত করা হয়:

$routes->get('/', 'Home::index');

Controller উদাহরণ:

<?php
namespace App\Controllers;

class Home extends BaseController {
    public function index() {
        echo "Welcome to CodeIgniter!";
    }
}

Route Method এবং HTTP Verbs

CodeIgniter বিভিন্ন HTTP Verbs (GET, POST, PUT, DELETE) এর জন্য Routes নির্ধারণ করতে পারে।

GET Route

$routes->get('about', 'Pages::about');

POST Route

$routes->post('form-submit', 'Forms::submit');

PUT Route

$routes->put('update-profile', 'Users::update');

DELETE Route

$routes->delete('delete-user/(:num)', 'Users::delete/$1');

Named Routes

Named Routes ব্যবহার করে Route এর জন্য একটি নির্দিষ্ট নাম সেট করা যায়। এটি পরবর্তী সময়ে Route-কে সহজে রেফারেন্স করতে সাহায্য করে।

Named Route সেটআপ

$routes->get('dashboard', 'Admin::dashboard', ['as' => 'admin_dashboard']);

Named Route কল করা

return redirect()->route('admin_dashboard');

Route Priority

Routes ডিক্লারেশনের ক্রম গুরুত্বপূর্ণ। CodeIgniter প্রথমে ডিফাইন্ড Route পরীক্ষা করে। যদি মিলে যায়, সেটি এক্সিকিউট হয়।

উদাহরণ:

$routes->get('product/123', 'Products::special');
$routes->get('product/(:num)', 'Products::details/$1');
  • URL: http://localhost/product/123Products::special কল হবে।
  • URL: http://localhost/product/456Products::details/$1 কল হবে।

Route Filters

Routes এর সাথে Filters যোগ করে ডেটা যাচাই বা Middleware যুক্ত করা যায়।

Filter যুক্ত করা:

$routes->get('admin', 'Admin::index', ['filter' => 'auth']);

সারসংক্ষেপ

CodeIgniter-এ Static এবং Dynamic Routes ব্যবহার করে অ্যাপ্লিকেশনের URL গুলি কার্যকরভাবে পরিচালনা করা যায়। সঠিক Routes সেটআপ করলে অ্যাপ্লিকেশন আরও মডুলার এবং রক্ষণাবেক্ষণযোগ্য হয়। Static Routes নির্দিষ্ট পেজের জন্য এবং Dynamic Routes ডাইনামিক ডেটা পাসের জন্য আদর্শ।

Content added By

URI Routing এবং Custom Routes

CodeIgniter-এ URI Routing হলো এমন একটি পদ্ধতি, যা ব্যবহারকারীর URL রিকোয়েস্টকে প্রাসঙ্গিক কন্ট্রোলার এবং মেথডের সাথে সংযুক্ত করে। এটি আপনাকে কাস্টম URL গঠন তৈরি করতে এবং ডিফল্ট রাউটিং পরিবর্তন করতে সহায়তা করে।


URI Routing কী?

CodeIgniter-এ URI Routing ব্যবহৃত হয়:

  • URL-কে নির্দিষ্ট কন্ট্রোলার মেথড-এ রিডাইরেক্ট করতে।
  • ডিফল্ট রাউট পরিবর্তন করতে।
  • SEO-বান্ধব URL তৈরি করতে।

ডিফল্টভাবে, CodeIgniter এর রাউটিং সিস্টেম app/Config/Routes.php ফাইলে কনফিগার করা হয়।


ডিফল্ট রাউট

CodeIgniter একটি ডিফল্ট রাউট প্রদান করে, যা app/Controllers/Home.php এর index() মেথডে পয়েন্ট করে। এটি Routes.php ফাইলে এভাবে নির্ধারিত থাকে:

$routes->get('/', 'Home::index');

এটি ব্রাউজারে http://localhost/your_project/ লোড করলে চালু হয়।


Custom Routes তৈরি

১. বেসিক Custom Route

Custom Route তৈরি করতে Routes.php ফাইলে নিচের কোড যোগ করুন:

$routes->get('products', 'ProductController::index');

এটি ব্রাউজারের http://localhost/your_project/products URL-কে ProductController এর index() মেথডে রিডাইরেক্ট করবে।


২. Route Parameter ব্যবহার

Parameter সহ কাস্টম রাউট তৈরি করতে:

$routes->get('product/(:num)', 'ProductController::show/$1');

এখানে:

  • (:num) : কেবল সংখ্যাসূচক মান গ্রহণ করবে।
  • $1 : URL এর প্রথম প্যারামিটার।

উদাহরণ:

  • URL: http://localhost/your_project/product/5
  • Controller মেথড:

    public function show($id)
    {
        echo "Product ID: " . $id;
    }
    

৩. Multiple Route Parameters

যদি একাধিক প্যারামিটার প্রয়োজন হয়:

$routes->get('user/(:num)/order/(:num)', 'UserController::order/$1/$2');

এখানে:

  • $1 : প্রথম প্যারামিটার (user ID)।
  • $2 : দ্বিতীয় প্যারামিটার (order ID)।

উদাহরণ:

  • URL: http://localhost/your_project/user/2/order/15
  • Controller মেথড:

    public function order($userId, $orderId)
    {
        echo "User ID: " . $userId . ", Order ID: " . $orderId;
    }
    

Route Placeholder টাইপস

CodeIgniter বিভিন্ন ধরনের প্লেসহোল্ডার ব্যবহার করতে দেয়:

  • (:num) : শুধুমাত্র সংখ্যা গ্রহণ করবে।
  • (:alpha) : শুধুমাত্র অক্ষর গ্রহণ করবে।
  • (:alphanum) : অক্ষর এবং সংখ্যা উভয় গ্রহণ করবে।
  • (:any) : যেকোনো কিছু গ্রহণ করবে (অক্ষর, সংখ্যা বা অন্যান্য)।
  • (:segment) : URL এর একটি সেগমেন্ট গ্রহণ করবে (এটি / ব্যতীত যেকোনো কিছু)।

HTTP ভেদে Route

GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের ভিত্তিতে কাস্টম রাউট তৈরি করা যায়।

উদাহরণ: POST Route

$routes->post('submit-form', 'FormController::submit');

এটি শুধুমাত্র POST রিকোয়েস্ট গ্রহণ করবে।

উদাহরণ: PUT Route

$routes->put('update-product/(:num)', 'ProductController::update/$1');

এটি PUT রিকোয়েস্ট গ্রহণ করবে।


Named Routes

Route এর জন্য নাম নির্ধারণ করে ব্যবহার করা যায়। এটি বড় অ্যাপ্লিকেশনের জন্য উপকারী।

$routes->get('profile', 'UserController::profile', ['as' => 'user_profile']);

এখন আপনি এই রাউটকে এভাবে ব্যবহার করতে পারেন:

echo route_to('user_profile');

Route Groups

Route গুলোকে একটি গ্রুপে সংগঠিত করা যায়। উদাহরণ:

$routes->group('admin', function($routes) {
    $routes->get('dashboard', 'AdminController::dashboard');
    $routes->get('users', 'AdminController::users');
});

এখন:

  • http://localhost/your_project/admin/dashboard
  • http://localhost/your_project/admin/users

Route Fallback

Route ফাইলে একটি fallback route নির্ধারণ করা যায়, যা রাউট না পাওয়া গেলে কাজ করে।

$routes->set404Override(function() {
    echo "Page not found!";
});

উদাহরণ: সম্পূর্ণ Routes

$routes->get('/', 'HomeController::index');
$routes->get('products', 'ProductController::index');
$routes->get('product/(:num)', 'ProductController::show/$1');
$routes->post('product/add', 'ProductController::add');
$routes->put('product/update/(:num)', 'ProductController::update/$1');
$routes->delete('product/delete/(:num)', 'ProductController::delete/$1');

$routes->group('admin', function($routes) {
    $routes->get('dashboard', 'AdminController::dashboard');
    $routes->get('users', 'AdminController::users');
});

সারাংশ

CodeIgniter-এ URI Routing কাস্টমাইজেশন অ্যাপ্লিকেশনের কার্যকারিতা বাড়ায় এবং ব্যবহারকারীর জন্য SEO-বান্ধব URL তৈরি করতে সহায়ক। Custom Routes, Route Parameters, এবং Named Routes ব্যবহার করে আপনি অ্যাপ্লিকেশনকে আরও সংগঠিত এবং ব্যবহারযোগ্য করতে পারেন।

Content added By

Route ফিল্টার এবং রেসট্রিকশন

Route Filters CodeIgniter-এ একটি শক্তিশালী বৈশিষ্ট্য, যা নির্দিষ্ট Routes-এ কার্যকলাপ সম্পাদনের আগে বা পরে কোড চালানোর সুযোগ দেয়। এটি সাধারণত Authentication, Authorization, Logging, অথবা অন্য কোনো প্রি-প্রসেসিং বা পোস্ট-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।


Route Filter এর ব্যবহার

Route Filter এর প্রধান কাজ হলো:

  1. নির্দিষ্ট Route-এ রেস্ট্রিকশন (যেমন: লগইন চেক করা) যুক্ত করা।
  2. রিকোয়েস্ট প্রক্রিয়ার সময় কোড চালানো।
  3. Route গুলোর জন্য অতিরিক্ত নিরাপত্তা বা কার্যক্ষমতা যোগ করা।

Route Filter সেটআপ

১. Filter তৈরি

Filter তৈরি করতে app/Filters ডিরেক্টরিতে একটি নতুন ক্লাস তৈরি করুন। উদাহরণস্বরূপ, একটি AuthFilter তৈরি করা যাক:

<?php

namespace App\Filters;

use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class AuthFilter implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        // Authentication চেক
        if (! session()->get('isLoggedIn')) {
            return redirect()->to('/login');
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // কোনো অ্যাকশনের পরে কাজ করতে চাইলে এখানে কোড যোগ করুন
    }
}

২. Filter নিবন্ধন

Filter নিবন্ধন করতে app/Config/Filters.php ফাইল এডিট করুন:

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    public $aliases = [
        'auth' => \App\Filters\AuthFilter::class,
    ];

    public $globals = [
        'before' => [],
        'after' => [],
    ];

    public $methods = [];

    public $filters = [];
}

৩. Route-এ Filter যুক্ত করা

Route-এ Filter যোগ করতে app/Config/Routes.php ফাইল এডিট করুন:

নির্দিষ্ট Route-এর জন্য Filter
$routes->get('dashboard', 'Dashboard::index', ['filter' => 'auth']);
Route Group-এর জন্য Filter
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
    $routes->get('dashboard', 'Admin::dashboard');
    $routes->get('users', 'Admin::users');
});

Route Restriction (নিষেধাজ্ঞা)

Route Restriction সাধারণত Authentication এবং Authorization চেকের জন্য ব্যবহৃত হয়।

উদাহরণ: Authentication Restriction

Controller এর নির্দিষ্ট মেথডে Filter যুক্ত করুন:

$routes->get('profile', 'User::profile', ['filter' => 'auth']);

Filter ফাইলের before() মেথডে চেক করুন:

public function before(RequestInterface $request, $arguments = null)
{
    if (! session()->get('isLoggedIn')) {
        return redirect()->to('/login');
    }
}

উদাহরণ: Role-Based Authorization

নির্দিষ্ট রোল চেক করে Route Restriction যুক্ত করা যায়।

Filter:

public function before(RequestInterface $request, $arguments = null)
{
    $role = session()->get('role');

    if ($role !== 'admin') {
        return redirect()->to('/not-authorized');
    }
}

Route:

$routes->get('admin', 'Admin::index', ['filter' => 'auth']);

Filter ব্যবহার করার ধরন

Global Filters

সব Route-এ before বা after ফিল্টার চালানোর জন্য ব্যবহার করা হয়।

app/Config/Filters.php ফাইল:

public $globals = [
    'before' => ['auth'], // সমস্ত রিকোয়েস্টের আগে 'auth' চালাবে
    'after' => [],
];

Method-Specific Filters

GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের জন্য আলাদা Filter চালানো যায়।

public $methods = [
    'post' => ['csrf'], // POST মেথডের জন্য 'csrf' ফিল্টার চালাবে
];

Specific Route Filters

নির্দিষ্ট Route-এ Filter চালানোর জন্য ব্যবহৃত হয় (উপরের উদাহরণ অনুযায়ী)।


Common Scenarios

১. CSRF Protection

Cross-Site Request Forgery (CSRF) এর সুরক্ষার জন্য একটি Filter:

public $aliases = [
    'csrf' => \CodeIgniter\Filters\CSRF::class,
];

Route-এ যোগ করুন:

$routes->post('form-submit', 'FormController::submit', ['filter' => 'csrf']);

২. IP Restriction

নির্দিষ্ট IP থেকে রিকোয়েস্ট সীমাবদ্ধ করার জন্য একটি Filter তৈরি করুন:

public function before(RequestInterface $request, $arguments = null)
{
    $allowedIps = ['127.0.0.1', '192.168.0.1'];
    $ip = $request->getIPAddress();

    if (! in_array($ip, $allowedIps)) {
        return redirect()->to('/not-authorized');
    }
}

ডিবাগিং এবং লগিং

Filter চালানোর সময় কোনো সমস্যা হলে CodeIgniter এর Debug Toolbar ব্যবহার করে লজিক পরীক্ষা করুন।

log_message('debug', 'Filter executed successfully.');

সারাংশ

Route Filter এবং Restriction ব্যবহার করে আপনি:

  1. নির্দিষ্ট Routes-এ Authentication এবং Authorization কার্যকর করতে পারেন।
  2. Route Group-এর জন্য নিরাপত্তা নীতি তৈরি করতে পারেন।
  3. অ্যাপ্লিকেশনের নিরাপত্তা এবং কার্যক্ষমতা উন্নত করতে পারেন।

CodeIgniter-এর Filter সিস্টেম আপনাকে সহজে অ্যাপ্লিকেশন নিরাপত্তা এবং রিকোয়েস্ট পরিচালনা করতে সহায়তা করে।

Content added By
Promotion